home *** CD-ROM | disk | FTP | other *** search
- /*
- IC Font Whats.c
-
- */
-
- #include <Script.h>
-
- #include "IC Types.h"
- #include "IC API.h"
-
- #include "IC Dialogs.h"
- #include "IC Window Globals.h"
- #include "IC Font Whats.h"
- #include "IC Windows.h"
- #include "IC Document.h"
- #include "IC Subs.h"
- #include "IC Misc Subs.h"
- #include "IC Movable Modal.h"
-
- void SetSizeOutlines(MenuHandle sizemenu,short font_num){
- Str255 tmpstr;
- short i;
- long the_size;
-
- for (i=1;i<=CountMItems(sizemenu);i++){
- GetMenuItemText(sizemenu,i,tmpstr);
- StringToNum(tmpstr,&the_size);
- if (RealFont(font_num,the_size))
- SetItemStyle(sizemenu,i,outline);
- else
- SetItemStyle(sizemenu,i,0);
- }
- }
-
- Boolean FindMenuItem(MenuHandle mh,StringPtr item,short* index){
- short i;
- Str255 test_name;
- Boolean ret=false;
-
- for (i=1;i<=CountMItems(mh);i++){
- GetMenuItemText(mh,i,test_name);
- if (!IUEqualString(test_name,item)){
- *index=i;
- ret=true;
- }
- }
- return ret;
- }
-
- long ValidateSize(long size){
- if ((size>0)&&(size<32767))
- return size;
- return GetDefFontSize();
- }
-
- long GetSizeMenuValue(DialogPtr dlg,short item){
- Str255 tmpstr;
- long tmpint;
- MenuHandle sizemenu;
-
- sizemenu=GetPopupMHandle(dlg,item);
- GetMenuItemText(sizemenu,GetDCtlValue(dlg,item),tmpstr);
- StringToNum(tmpstr,&tmpint);
- return ValidateSize(tmpint);
- }
-
- void GetCurrentSetting(DialogPtr dlg,short item,ICFontRecord* font_setting,short* font_num){
- font_setting->face=0;// normal face
- GetMenuItemText(GetPopupMHandle(dlg,item),GetDCtlValue(dlg,item),font_setting->font);
- GetFNum(font_setting->font,font_num);
- font_setting->size=GetSizeMenuValue(dlg,item+1);
- }
-
- pascal void DisplayFontProc(DialogPtr dlg,short item){
- ICFontRecord font_setting;
- SavedWindowInfo saved;
- short font;
- Rect r;
- Str255 s,name;
-
- SetPort(dlg);
- GetCurrentSetting(dlg,item-2,&font_setting,&font);
- EnterWindow(dlg,font,font_setting.size,0,&saved);
- GetDItemRect(dlg,item,&r);
- PenPat(&qd.gray);
- FrameRect(&r);
- PenPat(&qd.black);
- GetFontName(font,name);
- if ((!IUEqualString(name,"\pChicago"))&&((font_setting.size!=12)||(item==9)))
- GetIndString(s,128,16);
- else
- GetIndString(s,128,14);
-
- InsetRect(&r,3,3);
- TETextBox(&(s[1]),s[0],&r,teJustLeft);
- ExitWindow(&saved);
- }
-
- OSErr WhatOpenFont(WindowType wt,short item){
- WindowPtr dlg;
- MenuHandle fontmenu;
- MenuHandle sizemenu;
- ICFontRecord font_setting;
- long attr;
- short i;
- long count;
- short font_num;
- Str255 numstr;
- ICInstance inst;
- StringPtr keyp;
- OSErr err;
-
- dlg=WindowInfo[wt].window;
- fontmenu=GetPopupMHandle(dlg,item);
- count=sizeof(ICFontRecord);
-
- inst=GetInstance();
- keyp=WindowInfo[wt].items[item]->key;
-
- err=ICMapErr(ICGetPref(inst,keyp,&attr,(Ptr)&font_setting,&count));
- if ((err!=noErr)||(count!=sizeof(ICFontRecord))){
- font_num=GetAppFont();
- GetFontName(font_num,font_setting.font);
- font_setting.face=0;//normal
- font_setting.size=GetDefFontSize();
- } else
- GetFNum(font_setting.font,&font_num);
-
- ProcessAttributes(wt,item,attr);
-
- if (font_num==0){
- font_num=GetAppFont();
- GetFontName(font_num,font_setting.font);
- }
-
- if (FindMenuItem(fontmenu,font_setting.font,&i))
- SetDCtlValue(dlg,item,i);
-
- // The size menu is the next item in the WindowInfo thing
- sizemenu=GetPopupMHandle(dlg,item+1);
- NumToString(font_setting.size,numstr);
- if (FindMenuItem(sizemenu,numstr,&i))
- SetDCtlValue(dlg,item+1,i);
-
- WindowInfo[wt].items[item+1]->spare_data=(Ptr)((long)font_setting.size);
- SetSizeOutlines(sizemenu,font_num);
- SetDCtlEnable(dlg,item,!IsLocked(wt,item));
- SetDCtlEnable(dlg,item+1,!IsLocked(wt,item));
- SetDItemHandle(dlg,item+2,(Handle)gDisplayFontProc);
-
- return noErr;
- }
-
- OSErr WhatClickFont(WindowType wt,short item,EventRecord* er){
- DialogPtr dlg=WindowInfo[wt].window;
- ICFontRecord font_setting;
- short font_num;
-
- GetCurrentSetting(dlg,item,&font_setting,&font_num);
- SetSizeOutlines(GetPopupMHandle(dlg,item+1),font_num);
- DisplayFontProc(dlg,item+2);
- return noErr;
- }
-
- pascal Boolean MyModalFilter(DialogPtr dlg,EventRecord* er,short* item){
- #define bs 0x08
- char ch;
- Boolean ret=false;
-
- if (CancelModalFilter(dlg,er,item))
- ret=true;
- else if ((er->what==keyDown)||(er->what==autoKey)){
- if ((er->modifiers&cmdKey)==0){
- ch=(char)er->modifiers&0x00ff;
- if ((DirtyKey(ch))&&(!((ch==bs)||((ch>='0')&&(ch<='9'))))){
- SysBeep(1);
- er->what=nullEvent;
- }
- }
- }
-
- return ret;
- }
-
- Boolean GetOtherSize(long* size){
- DialogPtr dlg;
- short item;
- Str255 s;
- Ptr saved_state;
-
- dlg=GetNewDialog(500,(Ptr)0,(WindowPtr)-1);
-
- NumToString(*size,s);
-
- SetItemText(dlg,4,s);
-
- SelectDialogItemText(dlg,4,0,255);
-
- SetUpDefaultOutline(dlg,1,3);
-
- ShowWindow(dlg);
-
- DisableMenuBar(&saved_state,-1);
-
- InitCursor();
-
- do {
- MovableModalDialog(gMyModalFilter,&item);
- } while ((item!=1)&&(item!=2));
-
- if (item==1){
- GetItemText(dlg,4,s);
- StringToNum(s,size);
- *size=ValidateSize(*size);
- }
-
- ReEnableMenuBar(&saved_state);
- DisposeDialog(dlg);
-
- return (item==1);
- }
-
- OSErr WhatClickFontSize(WindowType wt,short item,EventRecord* er){
- DialogPtr dlg=WindowInfo[wt].window;
- ControlHandle control=GetDControlHandle(dlg,item);
- MenuHandle sizemenu=GetPopupMHandle(dlg,item);
- long n;
- Str255 tmpstr;
- short i;
- Boolean dummy;
-
- if (GetControlValue(control)==CountMItems(sizemenu)){
- n=(long)WindowInfo[wt].items[item]->spare_data;
- dummy=GetOtherSize(&n);
- } else
- n=GetSizeMenuValue(dlg,item);
-
- if (!(((*sizemenu)->enableFlags)&1<<2)){
- // has initial strange number
- DeleteMenuItem(sizemenu,1);
- DeleteMenuItem(sizemenu,1);
- }
-
- WindowInfo[wt].items[item]->spare_data=(Ptr)n;
-
- NumToString(n,tmpstr);
- if (!(FindMenuItem(sizemenu,tmpstr,&i))){
- InsertMenuItem(sizemenu,"\p(-;fred",0);
- SetMenuItemText(sizemenu,1,tmpstr);
- i=1;
- }
- SetControlMaximum(control,CountMItems(sizemenu));
- SetControlValue(control,i);
- DisplayFontProc(WindowInfo[wt].window,item+1);
- return noErr;
- }
-
- OSErr WhatFlushFont(WindowType wt,short item){
- DialogPtr dlg=WindowInfo[wt].window;
- OSErr err=noErr;
- ICFontRecord font_setting;
- ICFontRecord old_font_setting;
- long attr,count,size;
- short font;
- ICInstance inst;
- StringPtr key;
-
- GetCurrentSetting(dlg,item,&font_setting,&font);
-
- // get old values
- count=sizeof(ICFontRecord);
- inst=GetInstance();
- key=WindowInfo[wt].items[item]->key;
-
- err=ICMapErr(ICGetPref(inst,key,&attr,(Ptr)&old_font_setting,&count));
- if ((err!=noErr)||(count!=sizeof(ICFontRecord))){
- err=noErr;// clear the error
- old_font_setting.font[0]=0;
- }
-
- // write back if changed
-
- if ((old_font_setting.size!=font_setting.size)||(old_font_setting.face!=font_setting.face)||
- (IUEqualString(old_font_setting.font,font_setting.font))){
- if (!IsLocked(wt,item)){
- count=sizeof(ICFontRecord);
- err=ICMapErr(ICSetPref(inst,key,ICattr_no_change,(Ptr)&font_setting,count));
-
- if (err==noErr)
- DirtyDocument();
- }
- }
- return err;
- }
-
-